package com.txc.pay.controller;


import com.txc.common.global.result.Result;
import com.txc.common.global.result.ResultCode;
import com.txc.pay.service.IThirdPayService;
import com.txc.pay.vo.OrderVo;
import org.springframework.web.bind.annotation.*;

import jakarta.annotation.Resource;
import java.math.BigDecimal;

/**
 * 第三方支付控制器
 *
 * @ClassName: ThirdPayController
 * @Author: TXC
 * @Date: 2023-12-26 10:11
 **/
@RestController
@RequestMapping("/payment/thirdPay/{type}/{method}")
public class ThirdPayController {
    @Resource
    IThirdPayService thirdPayService;

    @GetMapping("/test")
    public Result<?> test(@PathVariable String type, @PathVariable String method) {
        try {
            OrderVo orderVo = new OrderVo("123456", "1", new BigDecimal(20));
            orderVo.setUserId("o3jTb6YGtut05LZ1zk7M-p-sa7sI");
            String result = thirdPayService.thirdPay(type, method, orderVo);
            return Result.ok(result);
        } catch (Exception e) {
            return Result.fail(ResultCode.ERROR.getCode(), e.getMessage());
        }
    }

    /**
     * 支付
     */
    @PostMapping("pay")
    public Result<?> pay(@PathVariable String type, @PathVariable String method, @RequestBody OrderVo order) {
        String result = thirdPayService.thirdPay(type, method, order);
        return Result.ok(result);
    }


    /**
     * 退款
     *
     * @param type        支付类型
     * @param method      支付方式
     * @param refund      退款金额
     * @param outRefundNo 商户退款订单号
     * @param total       原订单总金额
     * @param accountId   指定商户号（可为空）
     * @return 结果
     */
    @PostMapping("refund")
    public Result<?> refund(@PathVariable String type, @PathVariable String method, String outRefundNo, String refund, String total, String accountId) {
        String result = thirdPayService.refund(type, method, outRefundNo, refund, total, accountId);
        return Result.ok(result);
    }

    /**
     * 退款订单查询
     *
     * @param type        支付类型
     * @param method      支付方式
     * @param outRefundNo 退款订单号
     * @param accountId   指定商户号（可为空）
     * @return 详情
     */
    @PostMapping("queryByOutRefundNo")
    public Result<?> queryByOutRefundNo(@PathVariable String type, @PathVariable String method, String outRefundNo, String accountId) {
        String result = thirdPayService.queryByOutRefundNo(type, method, outRefundNo, accountId);
        return Result.ok(result);
    }


    /**
     * 根据流水号查询订单
     *
     * @param type          支付类型
     * @param method        支付方式
     * @param transactionId 流水号
     * @param accountId     指定商户号（可为空）
     * @return 结果
     */
    @PostMapping("queryOrderById")
    public Result<?> queryOrderById(@PathVariable String type, @PathVariable String method, String transactionId, String accountId) {
        String result = thirdPayService.queryOrderById(type, method, transactionId, accountId);
        return Result.ok(result);
    }

    /**
     * 根据商户订单号查询订单
     *
     * @param type       支付类型
     * @param method     支付方式
     * @param outTradeNo 商户订单id
     * @param accountId  指定商户号（可为空）
     * @return 结果
     */
    @PostMapping("queryOrderByOutTradeNo")
    public Result<?> queryOrderByOutTradeNo(@PathVariable String type, @PathVariable String method, String outTradeNo, String accountId) {
        String result = thirdPayService.queryOrderByOutTradeNo(type, method, outTradeNo, accountId);
        return Result.ok(result);
    }

    /**
     * 关闭订单
     *
     * @param type       支付类型
     * @param method     支付方式
     * @param outTradeNo 商户订单id
     * @param accountId  指定商户号（可为空）
     * @return 结果
     */
    @PostMapping("closeOrder")
    public Result<?> closeOrder(@PathVariable String type, @PathVariable String method, String outTradeNo, String accountId) {
        String result = thirdPayService.closeOrder(type, method, outTradeNo, accountId);
        return Result.ok(result);
    }

}
